package com.java.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.java.param.*;
import com.java.pojo.Product;
import com.java.to.OrderToProduct;
import com.java.utils.R;

import java.util.List;

public interface ProductService extends IService<Product> {
    R promo(String categoryName);

    /**
     * 根据类别集合，获取商品信息
     * @param productHotParam
     * @return
     */
    R hots(ProductHotParam productHotParam);

    /**
     * 获取全部商品类别信息
     * @return
     */
    R cList();

    /**
     * 根据类别id，页数，页码，查询商品数据
     * @param productIdsParam
     * @return 商品数据，总数量
     */
    R byCategory(ProductIdsParam productIdsParam);

    /**
     * 根据商品id，查询商品详细信息
     * @param productIdParam
     * @return
     */
    R detail(ProductIdParam productIdParam);

    /**
     * 根据商品id，查询商品全部图片信息
     * @param productIdParam
     * @return
     */
    R pictures(ProductIdParam productIdParam);

    /**
     * 搜素服务调用，获取全部商品用于搜索数据库同步
     * @return
     */
    List<Product> allList();

    /**
     * 搜索服务调用
     * @param productSearchParam
     * @return
     */
    R search(ProductSearchParam productSearchParam);

    /**
     * 根据商品id集合查询商品信息
     * @param productIds
     * @return
     */
    R Ids(List<Integer> productIds);

    /**
     * 修改库存，增加销售量
     * @param orderToProducts
     */
    void subNumber(List<OrderToProduct> orderToProducts);

    /**
     * 保存商品和图片信息
     * @param adminProductParam
     * @return
     */
    R adminSave(AdminProductParam adminProductParam);

    /**
     * 更新商品信息
     * @param product
     * @return
     */
    R adminUpdate(Product product);

    /**
     * 删除商品信息，
     * 1.购物车、订单有关的不用删除，收藏删除商品
     * 2.清除相应的缓存
     * 3.更新es库
     * @param productIdRemoveParam
     * @return
     */
    R adminRemove(ProductIdRemoveParam productIdRemoveParam);
}
